約 5,029,947 件
https://w.atwiki.jp/ce00582/pages/3072.html
?php require("calldata.php"); $sql = "SELECT * FROM data0401"; $result = mysql_query($sql, $link); $n=1; while( $row = mysql_fetch_row( $result ) ){ $matrix[$n][1] = $row[0]; $matrix[$n][2] = $row[1]; $matrix[$n][3] = $row[2]; $matrix[$n][4] = $row[3]; $n=$n+1; } $maxn=$n; for ($n=1;$n $maxn;$n++){ $year= $matrix[$n][1]; $age= $matrix[$n][2]; $m[$year][$age]= $matrix[$n][3]; $f[$year][$age]= $matrix[$n][4]; } $sql = "truncate eli04"; $exe= mysql_query($sql,$link); for ($year=5;$year 106;$year++){ for ($age=0;$age 105;$age++){ $x=$m[$year][$age]; $y=$f[$year][$age]; $sql = "insert into eli04 values($year,$age,$x,$y)"; $exe= mysql_query($sql,$link); } } $close_flag = mysql_close($link); print("04 将来推計人口 計算終了"); ?
https://w.atwiki.jp/hawken_jp/pages/55.html
設定 HAWKENの各種設定をご紹介します。 GAME / CONTROLS:ゲーム / コントロール INVERT MOUSE:マウスの反転 マウス操作の動く方向を反転させます。 INVERT TURN:ターンの反転 前後左右の移動を反転させます。 MOUSE SENSITIVITY:マウス感度 マウスの感度(移動量)を調整できます。 MOUSE SMOOTHING:マウススムージング マウス操作での視点移動がスムーズになるよう補正する機能です。 GAMEPAD SENSITIVITY:ゲームパッド感度 ゲームパッドの感度を調整できます。 FIELD OF VIEW:視界・視野角 HUD(ゲームプレイ画面)の視野角を調整できます。 COCKPIT LAG:コックピットの追従スピード マウス操作をした時のコックピットの追従ラグを調整できます。 CAMERA SHAKE LEVEL:手ブレレベル マウス操作をした時のコックピットの揺れを調整できます。 AUTO-SWICH ITEMS:アイテム自動切り替え アイテム使用後に次のアイテムに自動で切り替わるよう設定できます。 DOUBLE TAP TO BOOST:ダブルタップブースト 移動方向キーをダブルタップすることでブーストするよう設定できます。 LOCK RADAR ROTATION:レーダーの回転をロック レーダーの回転を固定できます。 SHOW SERVICE AWARD NOTIFCATIONS:表彰通知の表示 試合後の表彰表示をスキップできます。 SHOW GAMEPLAY TIPS:ゲームプレイのヒントを表示 ゲーム中に表示されるヒントを非表示にできます。 SHOW SIEGE OBJECTIVES:シージのオブジェクト表示 シージでのオブジェクトに関する表示を非表示にできます。 LANGUAGE:言語設定 ゲーム内に表示される言語を設定できます。 PROFANITY FILTER:禁止用語フィルター チャットでの禁止用語の発言を非表示にするオプションです。 COCKPIT ABILITY ACTIVATION COLOR:コックピットアビリティの起動カラー コックピットに表示されるアビリティの起動カラーを選べます。 ※マウス感度はゲームをプレイしながら自分に合った数値を探すと良いでしょう。 ※ダブルタップブーストをオンにするとShiftでのブーストが出来なくなります。 ※さらに後退キーの誤操作で180度ターンをしてしまうことがあります。 KEY BINDINGS:キー機能設定 操作方法・キー設定を参照。 VIDEO SETTINGS:ビデオ設定 画面解像度 お使いのモニターに合ったサイズを設定。 フルスクリーン フルスクリーンのオン・オフができます。オフの場合はウインドウモードに。 ウインドウ枠の非表示 ウインドウモードの場合にウインドウの枠を非表示にします。 垂直同期 モニターとGPUの同期に関する設定です。チェックすると描画が安定し、外すと描画の速度は上がりますが画面が乱れる可能性があります。 PhysX NVIDIAのPhysXによる効果のオン・オフを選べます。オンにした場合演出が派手になりますがグラボの性能によってはゲームが重くなります。安めのNVIDIAグラボを追加して、PhysX専用として割り当てることも可能です。 テクスチャ設定 テクスチャの描画クオリティを選べます。 グラフィック設定 グラフィックのクオリティを選べます。ゲーム中にカクつき・重さを感じたら設定を落としましょう。 カスタムグラフィックス カスタムグラフィックス設定を使用 詳細なグラフィックス設定のオン・オフを選べます。 スムーズフレームレート フレームレートの安定化を図る機能です。 モーションブラー ブレや残像の表現をシュミレートする機能です。 被写界深度 遠近感のためのボカシに関する機能です。 アンビエントオクルージョン 光の減衰を制御することによって現実感を加える照明関連の機能です。 ブルーム 光を馴染ませて和らげる効果に関する機能です。 レンズフレア レンズに光が反射する効果を付加する機能です。 高品質マテリアル ゲームに表示される物質表現のクオリティに関する機能です。 LOD描画距離 遠距離のモデルのテクスチャー品質を落とすことで描画負荷を軽減させる機能です。距離を伸ばすと遠くの物体も高品質で表示されますが負荷が増大します。 異方性フィルタリング 3Dテクスチャの奥行き斜め方向のチラつきを抑える機能です。倍率を上げるほど高精細になりますが負荷が増大します。 イメージグレイン(粒子) 光や砂などの粒状感に関する機能の設定です。 ※PCが低スペックの場合は「テクスチャ設定」「グラフィック設定」を最低(LOW)に、 「垂直同期」と「スムーズフレームレート」をオフ(チェックを外す)にすると若干快適になります。 AUDIO SETTINGS:ゲーム音声・効果音の設定 マスターボリューム 全体の音量を設定できます。 効果音ボリューム 効果音の音量を設定できます。 コックピットボイスボリューム 救難信号やゲームの状況を知らせるボイスの音量設定です。 メニューミュージックボリューム メニュー画面の音量設定です。 ゲームミュージックボリューム ゲーム内の音楽の音量設定です。 プッシュトークのオン・オフ プッシュトーク(ボイスチャット)のオン・オフを切り替えます。 プッシュトークの音量制限 プッシュトークの最大音量を抑える機能です。 プッシュトークの音量制限のしきい値 音量制限をかけるしきい値(上限)を設定します。 マイクボリューム 自分のマイクボリュームを調整できます。 他のプレイヤーのボリューム 自分以外のプレイヤーのプッシュトーク音量を設定します。 DEVICES HAWKENはHMD(ヘッドマウントディスプレイ)の Oculus Rift(オキュラス・リフト) に対応しています。その設定項目です。 設定に関する情報提供・質問 これ間違えて低解像度に変えてしまって、設定画面右下の利用が押せなくなってしまって設定を戻すことができないんですがどうすればいいのかどなたか教えていただけませんか - 2015-05-16 18 02 59
https://w.atwiki.jp/qt_memo/pages/58.html
QHashから指定した値を持つキーを取得 解説 key()はQHashから指定した値に一致するキーを1つ取得します. keys()はQHashから指定した値に一致するキーを全て取得します. uniqueKeys()はQHashから指定した値に一致するキーを全て取得します.ただし,キーが重複している場合は返値のQListから取り除かれます. 定義は以下の通りです. const Key QHash key ( const T value ) const const Key QHash key ( const T value, const Key defaultKey ) const QList Key QHash keys () const QList Key QHash keys ( const T value ) const QList Key QHash uniqueKeys () const key(),keys()の引数valueには検索対象のキーを指定します. key()の引数defaultKeyには,引数keyに一致する要素が見つからなかった場合に返される値を指定します.指定しない場合は型Keyのディフォルトコンストラクタの値が返されます. keys()で引数を指定しない場合は全てのキーが返されます. uniqueKeys()はQHashの全てのキーを返します.ただし,キー場重複している場合は,返値のQListから取り除かれます. 使用例 #include QTextCodec #include QTextStream #include QHash #include QList int main(int argc, char *argv[]) {QTextCodec setCodecForTr(QTextCodec codecForLocale());QTextStream out(stdout); QHash QString, int hash;hash.insert("a", 0); // hash = { a, 0 }hash.insert("b", 0); // hash = { a, 0 , b, 0 }hash.insertMulti ("b", 1); // hash = { a, 0 , b, 0 , b, 1 }hash.insertMulti ("b", 2); // hash = { a, 0 , b, 0 , b, 1 , b, 2 }out hash.key(0) "\n";out hash.key(3) "\n"; // ディフォルトコンストラクタの呼び出し,QStringのディフォルトコンストラクタは"".out hash.key(3, "default") "\n"; // キーが見つからない場合"default"を返す.out "===\n"; QList QString lst1 = hash.keys(0); // lst1 = (a, b)foreach (QString str, lst1) {out str ",";}out "\n"; QList QString lst2 = hash.keys(); // lst2 = (a, b, b, b)foreach (QString str, lst2) {out str ",";}out "\n"; QList QString lst3 = hash.uniqueKeys();// lst3 = (a, b)foreach (QString str, lst3) {out str ",";}out "\n"; return 0;} 出力 a default === a,b, a,b,b,b, a,b,
https://w.atwiki.jp/bizinbiyou/pages/40.html
店名 insence brain 電話番号 03-5491-7761 店舗住所 東京都世田谷区玉川4-11-8 店舗までのアクセス 田園都市線二子玉川駅西口徒歩7分 営業時間のご案内 10 00~20 00(カラー・パーマ最終受付/19 00、カット最終受付/20 00) 定休日 毎週火曜日 取り扱いクレジットカード VISA・JCB・DC・DINERS・MASTER カット価格 5780円 スタイリスト数 4人 席数 8席 備考 駐車場あり/夜19時以降も受付OK/ドライカット/デジタルパーマ/ドリンクサービスあり/カード支払いOK/男性スタッフが多い/女性スタッフが多い/個室あり ▼三軒茶屋・池尻大橋・二子玉川のその他の美容院 Ondine insence 桜新町店 The English Roses Ruxus insence angle.ank. insence 二子玉川店 nina 三軒茶屋 セカンドサロン unique エスプリ駒澤大学駅前店 Avolve SECILB -BLACK- HAIR MAKE SEED insence glue AXIS 三軒茶屋本店 beauty mania SECIL -二子玉川ー EQUIP Tamagawa Hair Vita Buena Hair Design TBK 用賀店 CERCA HAIR TIME s -用賀店- sol-Z japan 三軒茶屋店 ジャックダーセルKOMAZAWA CLiC用賀店 SELECT GRAN AZZURRI NOCONUTS 1st CONTACT エアック 三軒茶屋 Ash 桜新町店 TAYA 三軒茶屋 Ash 二子玉川店 DESIRE 三軒茶屋 ATRANTIS 池尻店
https://w.atwiki.jp/viprius/pages/43.html
有志によるスクリーンショット。 幼女だけじゃキワモノ扱いされる とのことで急遽作られたが、これを見てやろうって思う新規ちゃんいるのかな?いないのかな?どっちかな? 風景編 ダンジョン 猛毒の教場 背徳の洞窟 英雄の墓 魔獣地獄 空虚の塔 ヒューム領 アウロラ 不徳の庭園 ロン・マス領 ギモラの城郭 火山地帯 アイン領 乾いた風の荒地 設定 離れすぎるとマップオブジェクトが消えてしまう事があるので注意。 Alt+Zでウインドウ非表示 オプション→ゲーム→名前表示設定で、自分やモンスターの名前を非表示 マウスホイールで自分を非表示 「離れろ」「待て」でアニマを視界から消せる(アクティブ地帯では注意!) 壁紙 2Dイメージイラスト 大都市:■■ 3Dモデル、ロゴなど 大人アニマ■■■
https://w.atwiki.jp/rsslink/pages/63.html
@IT-Windows Server Insiderフォーラム サイトURL: RSS0.91:http //www.atmarkit.co.jp/rss/fwin2k/rss091.xml RSS1.00: RSS2.00: showrss プラグインエラー RSSが見つからないか、接続エラーです。
https://w.atwiki.jp/killrace/pages/188.html
MAP画像 重要なTIPS 関連TIPS 動画 コメント タグ MAP画像 250×250pix bmp 重要なTIPS 関連TIPS (最新100件まで表示されます) Desert P.S 動画 「動画:Desert P.S」をタグに含むページは1つもありません。 コメント 名前 コメント タグ Desert P.S
https://w.atwiki.jp/winamp/pages/40.html
以下原文のまま これらのキーボードショートカットが良い開始点であることに注目してください。ただし、このリストは完全には程遠いです。 ** キーボードショートカット (これらは大部分のWinampウインドウで使えます) ******* キー動作 F1ヘルプを開く Ctrl+F1Winampについてを開く Ctrl+A常に手前表示切り替え (プレイリストエディタとメディアライブラリでは無効) Ctrl+Alt+A常に手前表示切り替え (プレイリストエディタ) Ctrl+Wウインドウシェードモード切り替え Ctrl+D2倍サイズ切り替え Ctrl+E簡単移動切り替え (クラシックスキンのみ) Ctrl+T時間表示モード切り替え Alt+Wメインウインドウ表示切り替え Alt+Eプレイリストエディタ表示切り替え Alt+Gイコライザ表示切り替え Alt+Vビデオウインドウ表示切り替え Alt+Lメディアライブラリ表示切り替え Ctrl+TabWinampウインドウ間のアクティブ切り替え Alt+Sスキン選択へ移動 Ctrl+PWinamp設定へ移動 Alt+Fメインメニューを開く Alt+K現在のVisualizationプラグイン設定を開く Ctrl+Sh+K現在のVisualizationプラグインの開始/停止 Ctrl+KWinamp設定のVisualizationプラグイン画面を開く Ctrl+J指定時間へジャンプ画面を開く J or Keypad .指定ファイルへジャンプ画面を開く Ctrl+Alt+NWinampを新たに起動する(多重起動される) Ctrl+Alt+Bブックマークに追加 (ML と ml_bookmarks で有効) Alt+MWinampを最小化 Ctrl+H再生ファイル履歴を表示 ** メインウインドウキーボードショートカット ******* キー動作 (オプション/切り替え) Rリピート切り替え Sシャッフル切り替え Alt+3再生中ファイルの情報ボックス/タグエディタを開く (再生制御) Z前のトラック X再生/再開/停止解除 C一時停止/一時停止解除 V停止 Shift+Vフェードアウトして停止 Ctrl+V現在の曲を再生後に停止 B次のトラック Lファイルを再生 Ctrl+LURLを再生 Shift+Lフォルダを再生 ←5秒戻る →5秒進む ↑音量を上げる ↓音量を下げる テンキー 110曲前にジャンプ テンキー 6次のトラック テンキー 5再生/再生再開/一時停止解除 テンキー 4前のトラック テンキー 310曲後のジャンプ テンキー 75秒戻る テンキー 95秒進む テンキー 8音量を上げる テンキー 2音量を下げる テンキー 0ファイルを再生 Ctrl+テンキー 0URLを再生 Insertフォルダを再生 ** プレイリストウインドウキーボードショートカット ******* キー動作 Rリピート切り替え Sシャッフル切り替え Ctrl+Zリストの先頭に移動 Ctrl+Bリストの末尾に移動 Alt+Iブックマークに追加 (ML と ml_bookmarks で有効) (ファイルI/O) Lファイル追加 Ctrl+LURL追加 Shift+L フォルダ追加 Ctrl+N新規プレイリスト作成 Ctrl+Oプレイリストをロード Ctrl+Sプレイリストをセーブ Alt+3選択トラック情報 Ctrl+E選択トラックの名前変更 Ctrl+テンキー 0URL追加 Insertフォルダ追加 (プレイリスト操作) Ctrl+A全て選択 Ctrl+I選択の切り替え Deleteプレイリストから選択ファイルを削除する Ctrl+Delete未選択ファイルを削除する Ctrl+Sh+Delプレイリストをクリア (Ctrl+Nと同じ動作) Alt+↓ 選択ファイルを下に移動 Alt+↑ 選択ファイルを上に移動 ↓カーソル下移動 ↑カーソル上移動 Enter選択ファイルを再生 Endリスト終端にジャンプ Homeリスト先頭にジャンプ Page Up1ページを5曲上に移動 Page Down1ページを5曲下に移動 Alt+Delete実体が存在しない項目をプレイリストから削除 (プレイリストソート) Ctrl+Sh+1タイトルでソート Ctrl+Sh+2ファイル名でソート Ctrl+Sh+3ファイルパスとファイル名でソート Ctrl+R逆順並べ替え Ctrl+Sh+Rシャッフル 大部分のメインウインドウ再生コントロールはプレイリストエディタでも機能します. ** イコライザーキーボードショートカット (クラシックスキンのみ) ******* キー動作 1 - 0EQバンド 1-10 増加 Q - PEQバンド 1-10 減少 `EQプリアンプ増加 TABEQプリアンプ減少 NEQ有効切り替え AEQ自動ロード切り替え Sプリセットメニューを開く Ctrl+Alt+Sロードプリセット
https://w.atwiki.jp/tohomusicdb/pages/271.html
蠢々秋月 ~ Mooned Insect 作品:東方永夜抄 〜 Imperishable Night. シーン: データ BPM 【0 00~】151【0 14~】155 拍子 4/4拍子 再生時間 1 16 調性 【0 00~】嬰ハ短調(C#m)【0 14~】ホ短調(Em)【0 39~】嬰ハ短調(C#m) 使用楽器 コード進行 丨C丨D丨Am丨Bm丨C丨D丨Em丨Em丨 ZUN氏コメント リグル・ナイトバグのテーマです。 いつもの東方炸裂な感じで。 表情豊かな子供の無邪気さと、夜と蟲のイメージをミックスさせた イメージで創りました。蠢く小さな蟲40。 この曲に限らず、今回のMIDI版は完全におまけです。Wavがあったら 絶対にWavで聞いてください。Midiでは出せない幻想が含まれています。 (出典:東方永夜抄 Music Roomより) 月型の蟲 単純に韻を踏んでいるだけですが、春と言う文字と秋という文字を入 れて不思議な季節感を出してみました。蛍が何故月型かというと……。 (出典:東方永夜抄 おまけtxtより) 解説 コメント この曲の話題なら何でもOK! この曲SuperQuartet使ってるよね多分 -- (名無しさん) 2022-05-16 13 28 49 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/c21coterie/pages/604.html
問い181 問題文と2時間ほどにらめっこして到達した答え。 整数論の授業は人生で一度も受けたことがないのでまあ頑張ってアルゴリズムをひとりで考えてみた。 BWの組み合わせに番号を振って、黒白の石の数とセットを小さいほうからメモ化で積み上げていくコード。 memo[黒石の数][白石の数][この組でのBWのセットの最大値]であとはこれをメモ化を使いながら動的計画法でアセプト。 コード実行時間5秒。 まあまあだと思う。 必要のなさそうなループが一か所あるようなのでそこを削れれば今のコードより1000倍くらい早くなるかも? 調べて解くより自分で考えて解く方が楽しいというのはプログラマ(プロアマとわず)としては完全に欠点だな。 プログラマは自分で考えるより調べて応用できる方が重要だもの、俺はプロのプログラマにはなれない。 #include stdio.h #include string.h #include iostream const int bSize=60; const int wSize=40; const int hashSize=(bSize+1)*(wSize+1); __int64 memo[bSize+1][wSize+1][hashSize+1]; void calc(int b,int w){ __int64 temp; for(int i=1;i hashSize;i++){ int b1=i/(wSize+1); int w1=i%(wSize+1); temp=0; if(b =b1 w =w1){ //解いただけでアップアップ状態だけど、このループ、ループなしで計算できるかも? for(int j=0;j =i;j++){ temp+=memo[b-b1][w-w1][j]; } memo[b][w][i]=temp; } } } int main(){ memset(memo,0,sizeof(memo)); memo[0][0][0]=1; __int64 ans=0; for(int b=0;b =bSize;b++){ for(int w=0;w =wSize;w++){ calc(b,w); } } for(int i=1;i hashSize;i++){ ans+=memo[bSize][wSize][i]; std cout memo[bSize][wSize][i] "\n"; } std cout ans; } 問い185 Number Mind は, 有名なゲームMaster Mindの変種である. 色つきのペグの代わりに, 秘密の数字を推理する. 推理するごとに, 正しい桁がいくつあったかのみが伝えられる. つまり, 答えが1234で, 2036と推理した場合, 1つの桁が正しいと伝えられる. 数字は正しいが場所が違うということは伝えられない. 例えば, 以下の5桁の推理では, 90342 ;2 桁正しい 70794 ;0 桁正しい 39458 ;2 桁正しい 34109 ;1 桁正しい 51545 ;2 桁正しい 12531 ;1 桁正しい 答えの数字は39542の唯一つとなる. 以下の推理に基づいて, 5616185650518293 ;2 桁正しい 3847439647293047 ;1 桁正しい 5855462940810587 ;3 桁正しい 9742855507068353 ;3 桁正しい 4296849643607543 ;3 桁正しい 3174248439465858 ;1 桁正しい 4513559094146117 ;2 桁正しい 7890971548908067 ;3 桁正しい 8157356344118483 ;1 桁正しい 2615250744386899 ;2 桁正しい 8690095851526254 ;3 桁正しい 6375711915077050 ;1 桁正しい 6913859173121360 ;1 桁正しい 6442889055042768 ;2 桁正しい 2321386104303845 ;0 桁正しい 2326509471271448 ;2 桁正しい 5251583379644322 ;2 桁正しい 1748270476758276 ;3 桁正しい 4895722652190306 ;1 桁正しい 3041631117224635 ;3 桁正しい 1841236454324589 ;3 桁正しい 2659862637316867 ;2 桁正しい 16桁の唯一つの答えの数字を答えよ. 解法 賢い方法を思いつかなかったのでまずは答えだけもとめようと思い2重再帰の全探索で答えを求めてみました。 答えが一つであることを利用してsaiki関数の最後のcheck処理で少しずるをしています。 答えが複数になる場合はもう少し工夫が必要です。 #include stdio.h #include string.h void saiki(int deep,char commits[17]); int size; bool last=false; int outs[17][10]; struct D{ char text[17]; int hit; D(char t[17],int h){ for(int i=0;i 17;i++)text[i]=t[i]; hit=h; } }; D datas[]= { D("5616185650518293",2), D("3847439647293047",1), D("5855462940810587",3), D("9742855507068353",3), D("4296849643607543",3), D("3174248439465858",1), D("4513559094146117",2), D("7890971548908067",3), D("8157356344118483",1), D("2615250744386899",2), D("8690095851526254",3), D("6375711915077050",1), D("6913859173121360",1), D("6442889055042768",2), D("2321386104303845",0), D("2326509471271448",2), D("5251583379644322",2), D("1748270476758276",3), D("4895722652190306",1), D("3041631117224635",3), D("1841236454324589",3), D("2659862637316867",2) }; void saiki2(int deep,int p,char commits[17],int commit){ if(commit datas[deep].hit)return; if(p==16){ if(commit!=datas[deep].hit)return; saiki(deep+1,commits); return; } char c1=datas[deep].text[p],c2=commits[p]; if(c2== a ){ if(outs[p][c1- 0 ]==0 commit datas[deep].hit){ commits[p]=c1; saiki2(deep,p+1,commits,commit+1); commits[p]= a ; } if(last==true)return; outs[p][c1- 0 ]++; saiki2(deep,p+1,commits,commit); outs[p][c1- 0 ]--; }else{ if(c1==c2){ saiki2(deep,p+1,commits,commit+1); }else{ saiki2(deep,p+1,commits,commit); } } } void check(char commits[17]){ for(int i=0;i size;i++){ if(commits[i]== a ){ for(int j=0;j 10;j++){ if(outs[i][j]==0)commits[i]= 0 +j; } } } } void saiki(int deep,char commits[17]){ if(deep =size){ check(commits); printf("ans=%s\n",commits); last=true; return; } //int a; //printf("(%d %s)",deep,commits); //scanf("%d", a); saiki2(deep,0,commits,0); } int main(){ size=sizeof(datas)/sizeof(D); //printf("%s %d\n",datas[1].text,datas[1].hit); char commits[17]; memset(commits, a ,sizeof(commits)); memset(outs,0,sizeof(outs)); commits[16]= \0 ; saiki(0,commits); } 問い186 今, 100万人のユーザをもつ電話システムの通信記録がある. Rec NrCallerCalled 1200007100053 2600183500439 3600863701497 ......... n番目の記録の掛けた側と掛けられた側の電話番号は Caller(n) = S2n-1 と Called(n) = S2nで与えられる. S1, S2, ...は“ラグ付きフィボナッチ生成器”で定義される. 1 ≤ k ≤ 55については, Sk = [100003 - 200003k + 300007k3] (modulo 1000000) 56 ≤ kでは, Sk = [Sk-24 + Sk-55] (modulo 1000000)である. もしCaller(n) = Called(n)であれば, ユーザは間違って電話を掛けたとされ通信は切断される. そうでない場合には, 通信は成功している. XがYに電話を掛けるかその逆のときに, ユーザXとユーザYが友達であると呼ぶ. 同様に, XがYの友達であるかつYがZの友達であるとき, XがZの友達の友達であると呼ぶ. 同様にして長い連鎖が得られる. 首相の電話番号は524287である. 何回電話を掛けると99%のユーザ (首相自身も含む) が首相の友達になるだろうか? (注 切断された通信は数えない.) 解法 ユニオン木の概念を使って問題を解きます。 電話がかかるたびに生成されていくフレンドリストのグラフを以下の要領で纏めていきます。 電話がかかった場合、番号が小さいか大統領の電話ならそちらの番号を新しいボスとしてユニオン木にまとめていきます。 統合された方は統合された方のボスのボスとして統合する方のボスを新しいボスとして上位者に設定し、人数の報告を聞きます。 これを繰り返せばそこそこの速度で計算が終わります。 #include stdio.h #include set #include vector #include iostream const int all=100*10000; int callCount=0; int friendCount[all+2],toBoss[all+2]; int presidentNo=524287; void unionFriend(int call1,int call2){ if(call1==call2)return; callCount++; std vector int friendChain[2]; while(1){ friendChain[0].push_back(call1); if(toBoss[call1]==-1)break; call1=toBoss[call1]; } while(1){ friendChain[1].push_back(call2); if(toBoss[call2]==-1)break; call2=toBoss[call2]; } if(call1==call2)return; int changeBoss,bossNo; if(call1==presidentNo||(call1 call2 call2!=presidentNo)){ changeBoss=1; bossNo=call1; friendCount[call1]+=friendCount[call2]; friendCount[call2]=0; }else if(call2==presidentNo || (call2 call1 call1!=presidentNo)){ changeBoss=0; bossNo=call2; friendCount[call2]+=friendCount[call1]; friendCount[call1]=0; }else{ //あり得ないが念のため int a; printf("code Error %d %d\n",call1,call2); scanf("%d", a); } for(unsigned int i=0;i friendChain[changeBoss].size();i++){ toBoss[friendChain[changeBoss][i]]=bossNo; } } int main(){ int S[60]; __int64 k,mod=all; for(int i=0;i =all;i++){ friendCount[i]=1;//自分自身と知り合い toBoss[i]=-1;//まだi番の番号にボスはいない } for(k=1;k =55;k++){ S[(int)k]=(100003 - 200003*k + 300007*k*k*k)%mod; if(k%2==0){ unionFriend(S[(int)k],S[(int)k-1]); } } int K=k-1; while(friendCount[presidentNo] 99*10000){ K++; S[K%56]=(S[(K-55)%56]+S[(K-24)%56])%mod; if(K%2==0){ unionFriend(S[K%56],S[(K-1)%56]); } } printf("%d",callCount); } 問い187 http //projecteuler.net/problem=187 解法 ええと余りよくないコードです。 何の工夫もなく全探索してるだけで遅いです。 一億くらいなら扱う数字も小さいからいけるかと思ったのですが意外と時間かかりました。 反面教師にしかならないコードですね。 #include stdio.h #include vector const int up=11000; std vector int sosuu; bool so[up+1]; void setSo(){ int i2; memset(so,true,sizeof(so)); so[0]=so[1]=false; for(int i=4;i =up;i+=2)so[i]=false; sosuu.push_back(2); for(int i=3;i =up;i+=2){ if(so[i]==false)continue; sosuu.push_back(i); i2=i*2; for(int j=i*3;j up;j+=i2){ so[j]=false; } } } bool check(int n){ int a,count=0; for(int i=0;i sosuu.size();i++){ a=sosuu[i]; while(n%a==0){ count++; n/=a; if(count 1)break; } if(count 1)break; } if(n!=1)count++; return count==2; } int main(){ setSo(); int ans=0; for(int n=1;n 10000*10000;n++){ ans+=(check(n)); } printf("%d",ans); } 問い188 1777↑↑1855の最後の8桁を求めよ. 人生で初めてみる演算子というか相変わらず整数論の教育を人生で一度も受けたことがなかったので、どんな概念かわからなかったのですが、とりあえず乗算の周期性を利用して30分ほどひとりで考えてコードを書いて解いてみました。 整数論について知らず調べ物もせず書いたコードなので多分効率の悪いコードだと思う。 今のところコード実行時間は0.905秒。 #include stdio.h #include map #include iostream #include time.h __int64 size=1,mod=100000000; std map int,int toNum; __int64 hp(__int64 a,__int64 k){ if(k==1)return a; return toNum[(int)hp(a,k-1)%size]; } int main(){ double start=clock(); __int64 a=1777,b=a*a; toNum[0]=1; while(b!=a){ b=(b*a)%mod; size++; } b=1; for(int no=0;no size;no++){ toNum[no]=b; b=(b*a)%size; } __int64 k=hp(a,1854); b=1; for(int i=0;i k;i++)b=(b*a)%mod; std cout "ans=" b " time=" clock()-start; } 問い189 http //projecteuler.net/problem=189 三角形を塗り分けていくとき何通りの塗り分け方があるか答える問題。 解法 とりあえず一段ずつに分けての動的計画法でアセプト。 速度が出なかったので、一段の三角形の色を2ビットずつで扱う方法に切り替えてみたrgbでrが0、gが1、bが2。 コード実行時間30秒だからぎりぎり合格。 もしかしたら再帰と動的計画法を組み合わせたほうが早いかも。 #include stdio.h #include map #include set #include iostream #include time.h int main(){ double start=clock(); std map __int64,__int64 board[9]; std map __int64,__int64 iterator it; std set __int64 now,next; std set __int64 iterator sIt; board[0][0]=1; __int64 t,t1,ans=0; __int64 maskU,maskD; __int64 r=0,g=1,b=2,r1=0,g1=4,b1=8; now.insert(0); now.insert(1); now.insert(2); maskU=0x3; maskD=0xc; for(int i=1;i =7;i++){ for(sIt=now.begin();sIt!=now.end();sIt++){ t=(*sIt); t1=t 3; t=t 4; if(t1!=r){ next.insert(t|r1|g); next.insert(t|r1|b); } if(t1!=g){ next.insert(t|g1|r); next.insert(t|g1|b); } if(t1!=b){ next.insert(t|b1|r); next.insert(t|b1|g); } } for(it=board[i-1].begin();it!=board[i-1].end();it++){ __int64 pattern=(*it).first; for(sIt=next.begin();sIt!=next.end();sIt++){ __int64 patternD=((*sIt) maskD) 2; __int64 patternU=pattern maskU; bool out=false; //なにかブール演算で一発判定とか行かないかな? for(int j=0;j i;j++){ if((patternU 3)==(patternD 3)){ out=true; break; } patternU=patternU 4; patternD=patternD 4; } if(out==true)continue; if(board[i].find((*sIt))==board[i].end())board[i][(*sIt)]=0; board[i][(*sIt)]+=(*it).second; } } printf("%d ",board[i].size()); ans=0; for(it=board[i].begin();it!=board[i].end();it++){ //std cout (*it).second " "; ans+=(*it).second; } std cout "ans=" (ans)*3 "\n"; now.clear(); now.insert(next.begin(),next.end()); next.clear(); maskU=(maskU 4)|0x3; maskD=(maskD 4)|0xc; } std cout "time=" clock()-start; } 動的計画法と再帰探索を組み合わせてみた手法。 次の段の計算に必要なのはその段の奇数列目のみということに注目して速度アップ。 コードも短くシンプルになったし速度も1.903秒と上がったが、まだ不十分。 他の人のコードは眺めただけでまだ読んでないが1秒切るのが普通らしい。 この問題スクリプトで0.1秒を切ってる人たちはみてる世界が違う。 私は素朴に見えた世界でしか問題を解いてないような気がする。 まだまだ俺って実力ないな、、、 他の人のコードを見てなんとなく思いついたこと、もしかして私のコードsaiki関数のところで無駄な探索処理が繰り返されているってことか? 前の段の探索結果を再利用して計算結果を抑えろってことかも。 でもなんか実装が難しそうだな。 #include stdio.h #include map #include set #include iostream #include time.h std map __int64,__int64 board[9]; std map __int64,__int64 iterator it; void saiki(__int64 patternU,__int64 nowPattern,int old,int col,int size,int row,__int64 add){ if(col==size){ if(board[row].find(nowPattern)==board[row].end())board[row][nowPattern]=0; board[row][nowPattern]+=add; return; } int bad1=old,bad2=-1; if(col%2==1){ bad2=patternU 3; patternU=patternU 4; } nowPattern=nowPattern 2; for(int color=0;color 3;color++){ if(color==bad1||color==bad2)continue; int c=(col%2==0)*color; saiki(patternU,nowPattern|c,color,col+1,size,row,add); } } int main(){ double start=clock(); board[0][0]=1; for(int i=1;i =7;i++){ for(it=board[i-1].begin();it!=board[i-1].end();it++){ saiki((*it).first,0,-1,0,i*2+1,i,(*it).second); } printf("%d ",board[i].size()); __int64 ans=0; for(it=board[i].begin();it!=board[i].end();it++){ //std cout (*it).second " "; ans+=(*it).second; } std cout " ans=" (ans)*3 "\n"; } std cout "time=" clock()-start; } 問い189解法3 ここから先は他の人のコードを参考にしてコードを書いてみました。 とりあえずRGBの色の対称性を利用して計算量を下げてみた。 コード実行時間0.575秒、1秒は切れたがmapが足をひっぱているためにこれ以上はstd mapでは無理。 std mapを隙間のない配列に変換すればもう少し速度が出そうです。 2段目がRGR、BDBだとこの二つはその後の組み合わせ数は同じとなります。 これを利用して以後同じパターンは纏めていきます。 #include stdio.h #include map #include set #include iostream #include time.h std map int,__int64 board[9]; std map int,__int64 iterator it; std map int,int sweep[9]; int changeColor[5][3]={{2,1,0}, {2,0,1}, {1,2,0}, {1,0,2}, {0,2,1}}; void unionSet(int pattern,int size,int row){ size=(size+1)/2; for(int i=0;i 5;i++){ int p1=pattern,p2=0; for(int c=0;c size;c++){ int color=(p1 (c*2)) 3; p2|=(changeColor[i][color]) (c*2); } sweep[row][p2]=p1; } } void saiki(int patternU,int nowPattern,int old,int col,int size,int row,__int64 add){ if(col==size){ if(sweep[row].find(nowPattern)!=sweep[row].end()){ board[row][sweep[row][nowPattern]]+=add; return; } if(board[row].find(nowPattern)==board[row].end())board[row][nowPattern]=0; board[row][nowPattern]+=add; unionSet(nowPattern,size,row); return; } int bad1=old,bad2=-1; if(col%2==1){ bad2=patternU 3; patternU=patternU 2; nowPattern=nowPattern 2; } for(int color=0;color 3;color++){ if(color==bad1||color==bad2)continue; int c=(col%2==0)*color; saiki(patternU,nowPattern|c,color,col+1,size,row,add); } } int main(){ double start=clock(); board[0][0]=1; for(int i=1;i =7;i++){ for(it=board[i-1].begin();it!=board[i-1].end();it++){ saiki((*it).first,0,-1,0,i*2+1,i,(*it).second); } printf("%d ",board[i].size()); __int64 ans=0,t=0; for(it=board[i].begin();it!=board[i].end();it++){ //std cout (*it).second " "; ans+=(*it).second; if(t (*it).first)t=(*it).first; } std cout " ans=" (ans)*3 " " t "\n"; } std cout "time=" clock()-start; }